package src;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentManagementSystem {
    public static void startStudentManagementSystem() {
        ArrayList<Students> list = new ArrayList<>();//定义集合
        loop://指定循环名字
        while (true) {
            System.out.println("-------------Test学生管理系统--------------");
            System.out.println("1：添加学生信息");
            System.out.println("2：删除学生信息");
            System.out.println("3：修改学生信息");
            System.out.println("4：查询学生信息");
            System.out.println("5：退出");
            System.out.println("请输入你的选择：");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();
            switch (choose) {
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> updateStudent(list);
                case "4" -> queryStudent(list);
                case "5" -> {
                    System.out.println("退出");
                    break loop;//跳出指定循环
                }
                default -> System.out.println("选择错误请重新查询");
            }
        }
    }

    //    添加学生，并且判断id的唯一性
    public static void addStudent(ArrayList<Students> list) {
        Students s = new Students();//创建新的学生对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入id");
            String id = sc.next();
            boolean flag = contains(list, id);
            if (flag) {
                System.out.println("录入的id已经存在请重新输入");
            } else {
                s.setId(id);//将id设置到添加的学生对象中
                break;//循环不会停止需要跳出
            }
        }
        //保证id不存在时录入
        System.out.println("请输入姓名");
        String name = sc.next();
        s.setName(name);//将name设置到添加的学生对象中

        System.out.println("请输入年龄");
        int age = sc.nextInt();
        s.setAge(age);//将age设置到添加的学生对象中
        System.out.println("请输入家庭住址");
        String address = sc.next();
        s.setAddress(address);//将address设置到添加的学生对象中


        list.add(s);//添加的学生对象添加到集合中
        System.out.println("学生信息添加成功");
    }

    //    修改学生
    public static void updateStudent(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改学生的id");
        String setId = sc.next();
        if (getListIndex(list, setId) == -1) {
            System.out.println("修改的学生的id不存在");
            return;
        } else {
            Students stu = list.get(getListIndex(list, setId));//拿到要修改信息的学生
//            修改的学生姓名
            System.out.println("输入修改学生的姓名");
            String newName = sc.next();
            stu.setName(newName);
//             修改学生的年龄
            System.out.println("输入修改学生的年龄");
           int newAge = sc.nextInt();
            stu.setAge(newAge);
//            修改学生的家庭住址
            System.out.println("输入修改学生的家庭住址");
            String newAddress = sc.next();
            stu.setAddress(newAddress);
            System.out.println("信息修改完成");


        }
    }

    //    查询学生
    public static void queryStudent(ArrayList<Students> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息，添加后在查询 ");
            return;
        }
//        打印表头信息
        System.out.println("id\t name\t age\t address");
        for (int i = 0; i < list.size(); i++) {
            Students stu = list.get(i);
            System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());//输出学生信息
        }

    }

    //    删除学生
    public static void deleteStudent(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要删除学生的id");
        String deleteId = sc.next();
        int listIndex = getListIndex(list, deleteId);//比较要删除的学生的id,有则返回索引，没有则返回-1
        if (listIndex >= 0) {//
            list.remove(listIndex);
            System.out.println("id" + deleteId + "删除成功");
        } else {
            System.out.println("删除的学生id不存在，删除失败");
        }
    }

    //    比较id来确定id的唯一性
    public static boolean contains(ArrayList<Students> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            Students stu = list.get(i);
            String stuId = stu.getId();
            if (stuId.equals(id)) {
                return true;
            }
        }
        return false;
    }

    public static int getListIndex(ArrayList<Students> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return i;
            }
        }
        return -1;//返回-1表示不存在一样的元素
    }
    }

